#include "ProcessPool.hpp"

int main()
{

    //创建管道个数
    ProcessPool pp(5);
    //初始化管道
    pp.InitProcessPool([](int fd){
        while(true)
        {
            int code=0;
            std::cout<<"子进程堵塞"<<std::endl;
            //ssize_t通常用来作为read返回值
            ssize_t n=read(fd,&code,sizeof(code));
            //保证读的是整数
            if(n==sizeof(code))
            {
                std::cout<<"子进程被唤醒："<<getpid()<<std::endl;
                
                if(code>=0&&code<tasks.size())
                {
                    tasks[code]();//执行
                }
                else{
                    std::cerr<<"父进程给我的任务码错误"<<std::endl;
                }
            }
            else if(n==0)
            {
                std::cout<<"子进程退出了："<<getpid()<<std::endl;
                break;
            }
            else{
                std::cerr<<"read fd"<<fd<<",error"<<std::endl;
            }
        } });
    
        //执行十次任务
    int cnt=10;
    pp.PollingCtrlSubProcess(cnt);

    pp.WaitSubProcess();
    std::cout<<"父进程控制子进程完成，父进程结束"<<std::endl;
    return 0;
}